package cl.duocap.refaxion.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cl.duocap.refaxion.dto.BandejaDTO;

public class BandejaDAO {

	private Connection conexion;

	public BandejaDAO() {

	}

	public Connection getConexion() {
		return conexion;
	}

	public void setConexion(Connection conexion) {
		this.conexion = conexion;
	}

	public List<BandejaDTO> obtenerOrdenesBandejas(int estado) {

		List<BandejaDTO> lista = new ArrayList<BandejaDTO>();
		ResultSet rs = null;

		try {

			CallableStatement cstmt = conexion
					.prepareCall("{ call paConRefaxionListarOrdenesTrabajoPorEstado(?)}");
			int i = 1;
			cstmt.setInt(i++, estado);
			rs = cstmt.executeQuery();

			while (rs.next()) {
				BandejaDTO orden = new BandejaDTO();
				orden.setIdOrdenDeTrabajo(rs.getInt("idOrdenDeTrabajo"));
				orden.setCliente(rs.getString("cliente"));
				orden.setMatricula(rs.getString("matricula"));
				orden.setIdTipoServicio(rs.getInt("idTipoServicio"));
				orden.setFechaIngreso(rs.getString("fechaIngreso"));
				orden.setFechaEntrega(rs.getString("fechaEntrega"));
				orden.setPrecioTotal(rs.getInt("precioTotal"));
				if(rs.getString("responsable") != null){
					orden.setResponsable(rs.getString("responsable"));
				}else{
					orden.setResponsable("No asignado");
				}
					
				
				if (rs.getInt("estado") == 0) {
					orden.setDescripcionEstado("Pendiente");
				} else if (rs.getInt("estado") == 1) {
					orden.setDescripcionEstado("En Taller");
				} else if (rs.getInt("estado") == 2) {
					orden.setDescripcionEstado("Terminado");
				} else if (rs.getInt("estado") == 3) {
					orden.setDescripcionEstado("Anulada");
				}

				lista.add(orden);

			}

		} catch (SQLException ex) {
			throw new RuntimeException(
					"listar Ordenes  de Trabajo.", ex);
		} finally {
			try {
				rs.close();
				conexion.close();
			} catch (Exception ex) {

			}
			try {
				rs.close();
				conexion.close();
			} catch (Exception ex) {

			}
		}

		return lista;
	}
	
	public List<BandejaDTO> obtenerOrdenesBandejasPorCliente(int estado,int idUsuario) {

		List<BandejaDTO> lista = new ArrayList<BandejaDTO>();
		ResultSet rs = null;

		try {

			CallableStatement cstmt = conexion
					.prepareCall("{ call paConRefaxionListarOrdenesTrabajoPorEstadoPorCliente(?,?)}");
			int i = 1;
			cstmt.setInt(i++, estado);
			cstmt.setInt(i++, idUsuario);
			rs = cstmt.executeQuery();

			while (rs.next()) {
				BandejaDTO orden = new BandejaDTO();
				orden.setIdOrdenDeTrabajo(rs.getInt("idOrdenDeTrabajo"));
				orden.setCliente(rs.getString("cliente"));
				orden.setMatricula(rs.getString("matricula"));
				orden.setIdTipoServicio(rs.getInt("idTipoServicio"));
				orden.setFechaIngreso(rs.getString("fechaIngreso"));
				orden.setFechaEntrega(rs.getString("fechaEntrega"));
				orden.setPrecioTotal(rs.getInt("precioTotal"));
				if(rs.getString("responsable") != null){
					orden.setResponsable(rs.getString("responsable"));
				}else{
					orden.setResponsable("No asignado");
				}
					
				
				if (rs.getInt("estado") == 0) {
					orden.setDescripcionEstado("Pendiente");
				} else if (rs.getInt("estado") == 1) {
					orden.setDescripcionEstado("En Taller");
				} else if (rs.getInt("estado") == 2) {
					orden.setDescripcionEstado("Terminado");
				} else if (rs.getInt("estado") == 3) {
					orden.setDescripcionEstado("Anulada");
				}

				lista.add(orden);

			}

		} catch (SQLException ex) {
			throw new RuntimeException(
					"listar Ordenes  de Trabajo por usuario.", ex);
		} finally {
			try {
				rs.close();
				conexion.close();
			} catch (Exception ex) {

			}
			try {
				rs.close();
				conexion.close();
			} catch (Exception ex) {

			}
		}

		return lista;
	}



}